package demo3;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class Person {
    /*@Autowired//@Autowired注解用于自动装配一个bean
    private Shirt shirt;
    @Autowired
    private Sweater sweater;*/
    @Autowired
    @Qualifier("winter")//@Qualifier注解用于指定在多个相同类型的bean中，告诉Spring要使用哪个bean
    private Clothes clothes;
    /*
           当我们在一个类中需要调用另一个类的方法来完成功能时，那么当前类就与另一个类存在"依赖关系"
           比如:
           Person类的play方法需要使用Shirt的方法来完成其逻辑中的一环，此时可以理解为Person
           需要依赖Shirt
           当我们需要使用另一个类的功能时，我们通常:
           实例化并调用对应的方法来完成功能-
            Shirt shirt = new Shirt();
            shirt.xxxx();
            ....

           当我们引入Spring框架后，我们应当改变为，以"依赖，注入"的形式定义调用者与
           被调用者的依赖关系。
           Spring建议我们:
           当我们需要在一个类中使用另一个类时，应当将该类作为属性定义在当前类中，Spring会
           将该类实例化并通过属性设置进来，这样的行为被称为"依赖,注入"

           还是以当前案例:
           Person需要使用到Shirt,此时Shirt就是被依赖方，那么在当前Person中需要使用它时
           应当在Person中定义一个Shirt类型的属性:
           private Shirt shirt;
           那么可以借由Spring来创建被依赖的对象Shirt,并且将该实例通过Person的属性shirt
           将其设置进来，供Person使用。这样的过程将被依赖的对象通过属性注入到依赖方，
           简称依赖，注入

        */
    public void play(){
        //Shirt shirt = new Shirt();
        //System.out.println("出去玩了，需要穿:"+shirt.toString());
        System.out.println("出门玩耍需要穿:"+clothes);
    }
}
